A küldő felületről
A ScrollMax rendszer ütemezett feladatok segítségével tud automatikus email küldési funkciókat megvalósítani.
Ehhez a Microsoft Windows CDO könyvtárát használja fel, abból is a CDO.Message interfészt:
https://msdn.microsoft.com/en-us/library/ms872547%28v=exchg.65%29.aspx
Ez a felület a példányosítás után szabványos COM objektumot generál, amelynek SMTP parancsait és opcióit több programnyelvből is el lehet érni (pl. VBScript).
Így egy rendszergazda a Scroll használata nélkül is le tudja próbálni a szükséges beállításokat.
Hogy a beállítást a nyomda és rendszergazdák számára megkönnyítsük, egy CDO_Teszter nevű programot szoktunk a szervereken elhelyezni (vagy kérésre odaadni), amelyben a legfőbb mezőket be lehet paraméterezni, és anélkül próbálni, hogy közben a Scroll programokat futtatnánk.
Legfőbb paraméterek: SMTP szerver cím, port, protokoll, küldő felhasználó neve és jelszava, küldő és feladó email címe, tárgy, szövegtörzs.
Fontos: a CDO, ha nem sikerül azonnal küldenie, néhány tucat másodpercig is leblokkolhatja a program felületét. Különösen igaz ez arra az esetre, ha talál olyan szervert, amit megfelelőnek vél, de az mégsem reagál.
Ha a rendszergazdák a teszt programmal való próbálkozás során megtalálják azt az opció halmazt, amivel akár befelé, akár kifelé sikeresen küldhetnek, úgy azt mi a Scroll programok adatbázisába be tudjuk jegyezni. Enélkül a "Napi jelentés" vagy az "Email küldés" ütemezett feladatai nem fogják tudni célba juttatni az adatbázisban tárolt értesítéseket/leveleket/jelentéseket.
A hibákról és elhárításukról
Fontos tudni, hogy a beállítások változhatnak. Lejárhat a jelszó, átalakulhat a környezet (email szerver címe, elhelyezkedése, hitelesítési metódusa, stb.), bekerülhetnek olyan védelmek (tűzfal, aktív eszköz), amelyeken a CDO könyvtár nem tudja keresztül juttatni a leveleket.
Ezt az elmaradó napi jelentések, és el nem küldött leveleket jelzik. Ilyen esetben mindig az ütemezett feladat napló lehet a segítségünkre, amelyben szerepel a hibaüzenet (természetesen csak akkor, ha lefutott a feladat).
Minta:
2015-01-23 12:11:36>> Levélküldési paraméterek beállítása.
2015-01-23 12:11:36>> Levél küldése.
2015-01-23 12:11:36>> #HIBA>>> Levél küldési hiba: . A hibaüzenet: Die Verbindung des Transports zum Server wurde unterbrochen
Sajnos a CDO hibaüzenetei nem túl beszédesek, ennek egyik oka, hogy a levelező szerverig vezető úton sok buktató lehet.
Ám számítani kell rá, hogy egy "Transport failed" üzenet nem csak azt jelenti, hogy nem sikerül célba juttatni a csomagokat, hanem akár hitelesítési hibát is takarhat (nem megfelelő név vagy jelszó).
Ugyanígy gondot jelent, hogy a protokoll nem különbözteti meg a cél szerver elérhetetlenségét és a levelező szolgáltatás meglétének hiányát.
Minél komplikáltabb a rendszer, minél több védelmet tartalmaz, annál több esély van arra, hogy a küldés meghiúsul egy-egy összetevőn beállításain.
A küldés során felmerülő akadályokat a rendszergazdának kell elhárítani, mi csak tippeket tudunk adni az eddigi tapasztalatok alapján:
- Nem megfelelő port és vagy protokoll. Van olyan hely, ahol 25-ös port szerepel, SSL-el párosítva, van, ahol a port el van tolva (2525).
- Lejárt / megváltozott / hibás jelszó. Esetleg eltérő a felhasználó és email küldési jelszó. A jelszó legyen fix, és lehetőleg sose járjon le.
- A felhasználó nem engedélyezett (vagy csak adott tartományon belül)
- A felhasználó email címe nem volt külön megadva (Exchange/A. D.), vagy nem egyezik
- A konnektor portja nem egyezik, vagy SLL hiánya / megléte, esetleges port titkosítás vagy rejtés (csomagszűrő)
- A szerverhez nem IP címmel, hanem csak névvel lehet megfelelően csatlakozni (pl. mail.xy.hu <> 192.168.33.1)
- A konnektor csak befelé forgalmaz (SPAM védelem miatt)
- Tűzfalak, szegmensek, alhálózatok, NAT, vagy egyéb védelmek (vírusirtó blokkolás, SPAM filter)
- A relay nem volt lehetséges a felhasználó által
- A bejelentkezést nem sikerül megoldani (anonymous módként működhet csak)
- A megadott címről máshova lyukad ki a csomag, mint ahova szánva lett (IMAP / POP3 elérhetőséget kaptunk)
- Nagy- és kisbetűk érzékenysége (Linux mail server)
- Nagyon speciális felhasználói nevek (amik eltérnek az email címtől)
Egy rendszergazda megjegyzései alapján való kiegészítés:
- A Scroll szerver és az Exchange külön LAN szegmensen van és a kettő között egy védett csatorna (pl. IPsec VPN)
- Routerek közötti SMTP szűrés
- NAT beállítások
- TCP-MSS paraméter gond (fragmentáció)
- IPSec és egyéb csatornák
Sok egyéb lehetőség is elképzelhető.
Mivel a rendszerekhez érkező frissítések, foltozó csomagok és egyéb változtatások új opciókat jelenthetnek, minden ilyen futtatása után érdemes figyelni a rendszer stabilitását.
Fontos megjegyzés:
A levelező hitelesítések ismételt és folyamatos elutasítása, azok újraküldése érzékenyebb szervereken (pl. Active Directory) kiszolgálási gondokat okozhat nagyon összetett védelmek esetében.
Tesztelés
A CDO_Teszter program innen tölthető le:
[ide kerül majd]
Vagy az alábbi minta programot lehet VBScript nyelven futtatni a teszthez (http://www.paulsadowski.com/wsh/cdo.htm), megfelelően paraméterezve:
Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory.
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network).
Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Example CDO Message"
objMessage.From = """Me"" <me@my.com>"
objMessage.To = "test@paulsadowski.com"
objMessage.TextBody = "This is some sample message text.." & vbCRLF & "It was sent using SMTP authentication."
'==This section provides the configuration information for the remote SMTP server.
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.your.com"
'Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
'Your UserID on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "youruserid"
'Your password on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "yourpassword"
'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'Use SSL for the connection (False or True)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Update
'==End remote SMTP server configuration section==
objMessage.Send